"""
ret, dst = cv2.threshold(src, thresh, maxval, type)
src: 输入，只能输入单通道图，通常认为是灰度图。
thresh: 阈值。
maxval: 当像素超过了阈值，所赋予的值（或者小于，根据type方法确定）
type: 二值化方法。
ret: 返回阈值，对于Otsu's二值化更有用。
dst: 输出图

type:
    cv2.THRESH_BINARY 超过阈值部分取maxval（最大值），否则取0
    cv2.THRESH_BINARY_INV THRESH_BINARY的反转
    cv2.THRESH_TRUNC 大于阈值部分设为阈值，否则不变
    cv2.THRESH_TOZERO 大于阈值部分不改变，否则设为0
    cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
"""

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
img_path = "/Users/mac/Documents/Learning/LearningOpencv/datasets/1.jpg"

img = cv2.imread(img_path)
# cv2.imshow("input",img)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()
